package org.example;


import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

//单线程的线程池
public class MySingleThreadPool {

    //单线程线程池的线程
    private static Thread thread;

    //任务队列 用阻塞队列
    private static final BlockingQueue<Runnable> taskQueue = new LinkedBlockingQueue<>();

    //构造方法
    public MySingleThreadPool() {
        thread = new Thread(() -> {
            while (true) {
                try {
                    //从任务队列中取出一个任务
                    Runnable task = taskQueue.take();
                    //执行任务
                    task.run();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        thread.start();
    }

    //懒创建线程  策略 ：当有任务进来的时候，才创建线程
    public void execute(Runnable task) {
        try {
            //将任务添加到任务队列中
            taskQueue.put(task);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
